package m2;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.Scanner;
import java.util.concurrent.TimeoutException;

public class Consumer {

    public static void main(String[] args) throws IOException, TimeoutException {

        //1. 连接
        ConnectionFactory f = new ConnectionFactory();
        f.setHost("192.168.64.140");
        f.setPort(5672);
        f.setUsername("admin");
        f.setPassword("admin");
        Channel c = f.newConnection().createChannel();

        //2. 创建队列
        // 服务器已经存在的队列，参数不可变
        // 第二个参数false改为true，队列持久化
        c.queueDeclare("cookie", true, false, false, null);


        DeliverCallback deliverCallback = new DeliverCallback() {
            @Override
            public void handle(String s, Delivery delivery) throws IOException {
                String s1 = new String(delivery.getBody());
                System.out.println("收到：" + s1);
                // 模拟处理耗时
                // 遍历字符串找"."字符，每找到一个都暂停1秒
                for (int i = 0; i < s1.length(); i++) {

                    if (s1.charAt(i) == '.') {
                        try {
                            Thread.sleep(1000);
                        } catch (InterruptedException e) {

                        }
                    }

                }

                // 手动发送回执
                c.basicAck(delivery.getEnvelope().getDeliveryTag(),false);
                System.out.println("-------消息处理结束-------");
            }
        };
        CancelCallback cancelCallback = new CancelCallback() {
            @Override
            public void handle(String s) throws IOException {

            }
        };

        //只接受1条消息，处理完之前不接受下一条
        c.basicQos(1);

        // 从helloworld接收消息
        /*
            第二个参数 true ： 自动确认、自动ACK
                      false ：手动确认、处理完消息后，需要手动发送回执
         */
        c.basicConsume("cookie", false,deliverCallback,cancelCallback);

    }

}
